package com._5704.website.service;

import com._5704.website.entity.ToEmail;
import com._5704.website.entity.User;
import com._5704.website.form.UserForm;
import com._5704.website.shiro.JwtToken;
import com._5704.website.vo.userVO.UserVO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author Yiyoung
 * @since 2021-07-25
 */
public interface IUserService extends IService<User> {

    /**
     * 获取最近登陆时间
     * @param phoneNum 用户号码
     * @return
     */
//    Date getLastLoginTime(String phoneNum);

//    /**
//     * 设置登陆时间
//     * @param id 用户id
//     */
//    void setLastLoginTime(String id);

    /**
     * 插入用户
     * @param user 用户
     */
    void insertUser(User user);

    /**
     * 判断用户是否存在
     * @param id 用户id
     * @return
     */
//    boolean userIsExists(String id);

    /**
     * 更新用户
     * @param user 用户
     */
    void updateUser(User user);

    /**
     * 获得用户
     * @param id 用户id
     * @return yonhu
     */
    User getUser(String id);

    /**
     * 验证用户
     * @param loginPwd 登录密码
     * @param pwd 密码
     */
    void verifyPwd(String loginPwd , String pwd);

    /**
     * 设置token
     * @param id 用户id
     * @return token类
     */
    JwtToken setToken(String id);

    /**
     * 设置修改信息
     * @param user 用户
     * @param userForm 修改信息表单
     */
    void setModifyData(User user, UserForm userForm);

//    /**
//     * 更新权限
//     * @param id 用户id
//     * @param perms 权限
//     */
//    void updateAuthority(User user, int perms);

    /**
     * 是否为管理员
     * @param user 用户id
     * @return
     */
    boolean isAdmin(User user);

    /**
     * 是否为内部成员
     * @param user 用户id
     * @return
     */
    boolean isInsider(User user);

    /**
     * 获取用户
     * @param num 数量
     * @param page 页数
     * @return 用户列表
     */
    List<User> getUsers(int page , int num);

    /**
     * 隐藏密码和密码盐
     * @param user 用户
     */
//    void hidePrivacy(User user);

    /**
     * 获得返回的VO
     * @param user 用户
     * @return VO
     */
    UserVO getUserVO(User user);

    /**
     * 密码加密
     * @param pwd 密码
     * @param salt 盐
     * @return 加密密码
     */
    String encryptionPwd(String pwd, String salt);


    /**
     * 登出
     * @param id 用户id
     */
    void logOut(String id);

    /**
     * 获得数量
     * @return
     */
    int getNum();

    /**
     * 搜索
     * @param name 名字
     * @param page 页面
     * @param num 数量
     * @return
     */
    List<User> getUserByName(String name, int page, int num);

    /**
     * 获得数量
     * @return
     */
    int getNum(String name);

    /**
     * 是否是黑名单用户
     * @param id
     * @return
     */
    boolean isBalckLister(User id);



    /**
     * 更新头像
     * @param file 文件
     * @param userId 用户id
     * @return
     */
    String uploadAvatar(MultipartFile file, String userId);

    /**
     * 发送email
     * @return
     */
    void sendEmail(ToEmail email);

    /**
     * 获得注册的email
     *
     * @return
     * @param userId 用户id
     * @param doSomething 做什么
     */
    ToEmail getEmail(String userId, String doSomething);
}
